package com.ishitong.platform.common.dao;


import java.sql.Connection;
import java.util.List;
import java.util.Map;

import com.ishitong.platform.common.page.Page;


public interface GenericSQLDaoInterface
{

	/**
	 * 根据普通SQL进行分页查询
	 * 
	 * @param sql
	 * @param pageSize
	 * @param pageNum
	 * @param args
	 * @return
	 */
	public Page findBySql(String sql, int pageSize, int pageNum, Object... args);

	/**
	 * 通过普通SQL语句进行查询
	 * 
	 * @param sql
	 * @param pageSize
	 * @param pageNum
	 * @param resultType
	 * @param args
	 * @return
	 */
	public Page findBySql(String sql, int pageSize, int pageNum,
			Class resultType, Object... args);

	/**
	 * 根据sql语句，快速查询所有的结果
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public List findFastBySql(String sql, Object... args);

	/**
	 * 通过普通SQL语句快速查询
	 * 
	 * @param sql
	 * @param resultType
	 * @param args
	 * @return
	 */
	public List findFastBySql(String sql, Class resultType, Object... args);

	/**
	 * 根据sql,查询单条记录
	 * 
	 * @param sql
	 * @param resultType
	 * @param args
	 * @return
	 */
	public Object findOneBySql(String sql, Class resultType, Object... args);

	/**
	 *  执行SQL,并反回记录数
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public int executeBySql(String sql, Object... args);

	/**
	 * 获得count根据普通SQL
	 * @param sql
	 * @param args
	 * @return
	 */
	public long countBySql(String sql, Object... args);

	/**
	 * 通过FreeSQL查询批定页数据,返回List
	 * 
	 * @param name  freeSQL名称
	 * @param parameterObject   查询条件对象
	 * @return List
	 */
	public List findFastByFreeSql(String name, Object parameterObject);

	/**
	 * 通过FreeSQL查询批定页数据
	 * 
	 * @param name
	 *            freeSQL名称
	 * @param pageSize
	 *            每页记录数
	 * @param pageNum
	 *            页码
	 * @param parameterObject
	 *            查询条件对象
	 * @return Page
	 */
	public Page findByFreeSql(String name, int pageSize, int pageNum,
			Object parameterObject);

	/**
	 * 通过FreeSQL查询单条记录
	 * 
	 * @param name  freeSQL名称
	 * @param parameterObject   查询条件对象
	 * @return Object
	 */
	public Object findOneByFreeSql(String name, Object parameterObject);

	/**
	 * 通过FreeSQL查询总记录数
	 * 
	 * @param name
	 *            freeSQL名称
	 * @param parameterObject
	 *            查询条件对象
	 * @return long
	 */
	public long countByFreeSql(String name, Object parameterObject);

	/**
	 * 执行freesql
	 * @param name
	 * @param parameterObject
	 * @return
	 */
	public long executeByFreeSql(String name, Object parameterObject);

	public Connection getConnection();
	/**
	 * 存储过程执行
	 * @param sql 存储过程名称 { ?=call qktq(?,?,?)}
	 * @param Map<Integer,Integer> 输出参数  key为输出下标，value 为输出类型java.sql.Types 中的类型值
	 * @param resultParamIndex 返回结果下标值，从1开始
	 * @param args 存储过程输入参数
	 * @return Map<Integer,Object>  key为下标 value为值
	 */
	public Map<Integer,Object> execProdure(String sql,Map<Integer,Integer> outParam,Object ...args);
}
